﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Collections;
using System.Text;
using Proxy;
using System.Web.Services;
using SIM.Util;

namespace SIM.Geo.UI.Geo
{
    public partial class frmSondaje1 : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.rgLista.ClientSettings.Scrolling.ScrollHeight = int.Parse(System.Configuration.ConfigurationManager.AppSettings["listaPrincipalScrollHeight"]);
                CargarCombos();
                Listar();
            }
            if (this.hidCodigoLabor.Value.CompareTo(this.hidDato.Value) != 0)
            {
                this.hidCodigoLabor.Value = this.hidDato.Value;
                Listar();
                CargarLabor();
            }

            this.txtNumero.Attributes.Add("onBlur", "return GenerarNombreDDH();");
            this.txtNumero.Attributes.Add("onpaste", "return false;");
            this.txtNumero.Attributes.Add("onkeypress", "return solonumerosypunto(event);");
            this.txtAnio.Attributes.Add("onBlur", "return GenerarNombreDDH();");
        }

        private void CargarLabor()
        {
            try
            {
                this.searchBoxLabor.Text = string.Empty;
                this.lblLabor.Text = string.Empty;
                using (SELaborClient proxyLabor = new SELaborClient("BasicHttpBinding_ISELabor"))
                {
                    var labor = proxyLabor.Obtener(int.Parse(this.hidCodigoLabor.Value.ToString()));
                    if (labor != null)
                    {
                        this.hidCodigoLabor.Value = labor.CodigoLabor.ToString();
                        this.hidDato.Value = labor.CodigoLabor.ToString();
                        this.lblLabor.Text = labor.NombreLabor + " - " + labor.Cuadrante.ToString();
                        this.searchBoxLabor.Text = labor.NombreLabor;
                    }
                }
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:CargarLabor", ex);
            }

        }
        private void CargarCombos()
        {
            try
            {


                //Llena los combos de busqueda                
                this.txtAnioBuscar.Text = DateTime.Today.Year.ToString();
                this.txtAnio.Text = DateTime.Today.Year.ToString();

                this.ddlEstadoBuscar.Items.Add(new ListItem(Constantes.TipoSeleccion.TODOS, TipoDropDownList.Todos.GetHashCode().ToString()));
                this.ddlEstadoBuscar.Items.Add(new ListItem(enmEstadoSondaje.Iniciado.ToString(), enmEstadoSondaje.Iniciado.GetHashCode().ToString()));
                this.ddlEstadoBuscar.Items.Add(new ListItem(enmEstadoSondaje.Finalizado.ToString(), enmEstadoSondaje.Finalizado.GetHashCode().ToString()));
                this.ddlEstadoBuscar.SelectedValue = enmEstadoSondaje.Iniciado.GetHashCode().ToString();

                using (SEZonaClient proxy = new SEZonaClient("BasicHttpBinding_ISEZona"))
                {
                    var zonas = proxy.ObtenerListItem().ToList();
                    this.Bind(this.ddlZonaBuscar, zonas);
                    this.ddlZonaBuscar.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.TODOS, TipoDropDownList.Todos.GetHashCode().ToString()));

                    this.Bind(this.ddlZona, zonas);
                    this.ddlZona.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString()));
                }

                using (SECategoriaSondajeClient proxy = new SECategoriaSondajeClient("BasicHttpBinding_ISECategoriaSondaje"))
                {
                    var categorias = proxy.ObtenerListItem1(enmClaseSondaje.DDH.GetHashCode()).ToList();
                    this.Bind(this.ddlCategoriaBuscar, categorias);
                    this.ddlCategoriaBuscar.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.TODOS, TipoDropDownList.Todos.GetHashCode().ToString()));

                    //var categorias1 = proxy.ObtenerListItem().ToList();
                    this.Bind(this.ddlCategoria, categorias);
                    this.ddlCategoria.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString()));
                }


                //Llena los combos para registro
                using (SEGeologoClient proxy = new SEGeologoClient("BasicHttpBinding_ISEGeologo"))
                {
                    this.Bind(this.ddlResponsable, proxy.ObtenerListItem().ToList());
                    this.ddlResponsable.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString()));
                }

                using (SEEmpresaContratistaClient proxy = new SEEmpresaContratistaClient("BasicHttpBinding_ISEEmpresaContratista"))
                {
                    this.Bind(this.ddlEmpresa, proxy.ObtenerListItem().ToList());
                    this.ddlEmpresa.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString()));
                }

                //using (SELaborClient proxy = new SELaborClient("BasicHttpBinding_ISELabor"))
                //{
                //    this.Bind(this.ddlLabor, proxy.ObtenerListItem().ToList());
                //    this.ddlLabor.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.NINGUNA, TipoDropDownList.Ninguno.GetHashCode().ToString()));
                //}
            }
            catch (Exception ex)
            {


                Logger.Error("Sondaje:CargarCombos", ex);
            }
        }

        #region Mensajes
        protected override void MostrarMensajeValidacion(string mensaje)
        {
            this.pnlMensajeValidacion.Visible = true;
            this.lblMensajeValidacion.Text = mensaje;
        }

        protected override void OcultarMensajeValidacion()
        {
            this.pnlMensajeValidacion.Visible = false;
            this.lblMensajeValidacion.Text = string.Empty;
        }

        protected override void MostrarMensaje(string mensaje, enmTipoMensajeMostrar tipoMensaje = enmTipoMensajeMostrar.Informativa)
        {
            this.pnlMensaje.Visible = true;
            this.lblMensaje.Text = mensaje;
            this.pnlMensaje.CssClass = this.ObtenerEstiloMensaje(tipoMensaje);
        }

        protected override void OcultarMensaje()
        {
            this.pnlMensaje.Visible = false;
            this.lblMensaje.Text = string.Empty;
        }

        #endregion

        protected override void Listar()
        {
            try
            {
                using (SESondajeClient proxy = new SESondajeClient("BasicHttpBinding_ISESondaje"))
                {
                    var lista = proxy.BuscarSondaje(this.txtNombreBuscar.Text.Trim(), this.txtAnioBuscar.Text, int.Parse(this.ddlZonaBuscar.SelectedValue.ToString()),
                                    int.Parse(this.ddlEstadoBuscar.SelectedValue.ToString()), int.Parse(this.ddlCategoriaBuscar.SelectedValue.ToString()), enmClaseSondaje.DDH.GetHashCode());
                    this.rgLista.DataSource = lista;
                    
                    this.rgLista.DataBind();
                }

            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:Listar", ex);
            }
        }

        protected override void Limpiar()
        {
            this.ddlCategoria.SelectedValue = TipoDropDownList.Seleccionar.GetHashCode().ToString();
            this.txtNumero.Text = string.Empty;
            this.txtAnio.Text = DateTime.Now.Year.ToString();
            this.txtNombreDDH.Text = string.Empty;
            this.ddlZona.SelectedValue = TipoDropDownList.Seleccionar.GetHashCode().ToString();
            this.ddlResponsable.SelectedValue = TipoDropDownList.Seleccionar.GetHashCode().ToString();
            this.ddlEmpresa.SelectedValue = TipoDropDownList.Seleccionar.GetHashCode().ToString();
            this.ddlMaquina.Items.Clear();
            this.txtFechaInicio.SelectedDate = null;
            this.txtFechaFinal.SelectedDate = null;
            this.txtSeccion.Text = string.Empty;
            this.txtDistancia.Text = string.Empty;
            this.chkLitologico.Checked = true;
            this.chkMuestras.Checked = true;
            this.chkGeomecanica.Checked = true;
            this.chkEstructuras.Checked = true;
            this.txtObservaciones.Text = string.Empty;

            this.hidCodigoLabor.Value = "0";
            this.hidDato.Value = "0";
            this.lblLabor.Text = string.Empty;
            this.searchBoxLabor.Text = string.Empty;

            this.lblEstado.Text = enmEstadoSondaje.Iniciado.ToString();

            OcultarMensaje();
            OcultarMensajeValidacion();
        }

        protected override void Guardar()
        {
            try
            {
                //Se valida antes de grabar
                StringBuilder sb = new StringBuilder();
                if (!this.Validar(ref sb))
                {
                    this.MostrarMensajeValidacion(sb.ToString());
                    return;
                }

                Sondaje sondaje = new Sondaje();
                sondaje.CodigoSondaje = int.Parse(this.hidCodigo.Value);
                sondaje.NombreDDH = this.txtNombreDDH.Text;
                sondaje.FechaInicio = (DateTime)this.txtFechaInicio.SelectedDate;
                sondaje.FechaFin = (this.txtFechaFinal.SelectedDate == null) ? null : this.txtFechaFinal.SelectedDate;
                sondaje.Seccion = int.Parse(this.txtSeccion.Text);
                sondaje.CumpleLitologia = (this.chkLitologico.Checked == true) ? (short)1 : (short)0; ;
                sondaje.CumpleMuestra = (this.chkMuestras.Checked == true) ? (short)1 : (short)0; ;
                sondaje.CumpleGeomecanica = (this.chkGeomecanica.Checked == true) ? (short)1 : (short)0; ;
                sondaje.CumpleEstructura = (this.chkEstructuras.Checked == true) ? (short)1 : (short)0; ;
                sondaje.Observacion = this.txtObservaciones.Text.Trim();
                sondaje.Norte = 0;
                sondaje.Este = 0;
                sondaje.Cota = 0;
                sondaje.Distancia = double.Parse(this.txtDistancia.Text);
                sondaje.Azimut = 0;
                sondaje.Inclinacion = 0;
                sondaje.Estado = (short)enmEstadoSondaje.Iniciado.GetHashCode();
                sondaje.CodigoMaquina = int.Parse(this.ddlMaquina.SelectedValue.ToString());

                if (this.hidCodigoLabor.Value == "0")
                    sondaje.CodigoLabor = null;
                else
                    sondaje.CodigoLabor = int.Parse(this.hidCodigoLabor.Value.ToString());

                sondaje.CodigoGeologo = int.Parse(this.ddlResponsable.SelectedValue.ToString());
                sondaje.Anio = int.Parse(this.txtAnio.Text.ToString());
                sondaje.Fila = 0;
                sondaje.CodigoZona = int.Parse(this.ddlZona.SelectedValue.ToString());
                sondaje.CodigoCategoriaSondaje = int.Parse(this.ddlCategoria.SelectedValue.ToString());
                sondaje.NumeroSondaje = this.txtNumero.Text;
                sondaje.CodigoClaseSondaje = enmClaseSondaje.DDH.GetHashCode();
                sondaje.CodigoEmpresa = int.Parse(this.ddlEmpresa.SelectedValue.ToString());
                sondaje.CumplioLitologia = 0;
                sondaje.CumplioMuestra = 0;
                sondaje.CumplioGeomecanica = 0;
                sondaje.CumplioEstructura = 0;

                using (SESondajeClient proxy = new SESondajeClient("BasicHttpBinding_ISESondaje"))
                {
                    if (this.hidCodigo.Value.CompareTo("0") == 0)
                        proxy.InsertarSondaje(sondaje);
                    else
                        proxy.ModificarSondaje(sondaje);
                }

                this.MostrarMensaje(MSG_OK_GRABAR);
                this.mpRegistro.Hide();
                this.Listar();

            }
            catch (Exception ex)
            {
                MostrarMensajeValidacion(MSG_ERROR_GRABAR);
                Logger.Error("Sondaje:Guardar", ex);
            }
        }


        private void CargarDatos(int codigoSondaje)
        {
            try
            {
                using (var proxy = new SESondajeClient("BasicHttpBinding_ISESondaje"))
                {
                    var item = proxy.ObtenerSondaje(codigoSondaje);
                    if (item != null)
                    {
                        this.hidCodigo.Value = item.CodigoSondaje.ToString();
                        this.ddlCategoria.SelectedValue = item.CodigoCategoriaSondaje.ToString();
                        this.txtNumero.Text = item.NumeroSondaje.ToString();
                        this.txtAnio.Text = item.Anio.ToString();
                        this.txtNombreDDH.Text = item.NombreDDH.Trim();
                        this.ddlZona.SelectedValue = item.CodigoZona.ToString();
                        this.ddlResponsable.SelectedValue = item.CodigoGeologo.ToString();

                        if (item.CodigoLabor != null)
                        {
                            this.hidCodigoLabor.Value = item.CodigoLabor.ToString();
                            this.hidDato.Value = item.CodigoLabor.ToString();
                            this.lblLabor.Text = item.Labor.NombreLabor + " - " + item.Labor.Cuadrante.ToString();
                            this.searchBoxLabor.Text = item.Labor.NombreLabor;
                        }
                        else
                        {
                            this.hidCodigoLabor.Value = "0";
                            this.lblLabor.Text = string.Empty;
                            this.searchBoxLabor.Text = string.Empty;
                        }

                        //Carga todas las Maquinas
                        this.ddlEmpresa.SelectedValue = item.CodigoEmpresa.ToString();
                        ddlEmpresa_SelectedIndexChanged(null, null);
                        this.ddlMaquina.SelectedValue = item.CodigoMaquina.ToString();

                        this.txtFechaInicio.SelectedDate = item.FechaInicio;
                        this.txtFechaFinal.SelectedDate = item.FechaFin;
                        this.txtSeccion.Text = item.Seccion.ToString();
                        this.txtDistancia.Text = item.Distancia.ToString();
                        this.chkLitologico.Checked = (item.CumpleLitologia == 1) ? true : false;
                        this.chkMuestras.Checked = (item.CumpleMuestra == 1) ? true : false;
                        this.chkGeomecanica.Checked = (item.CumpleGeomecanica == 1) ? true : false;
                        this.chkEstructuras.Checked = (item.CumpleEstructura == 1) ? true : false;
                        this.txtObservaciones.Text = item.Observacion.Trim();

                        //Deshabilito cajas de texto que se relacionan con litologia, estructura y geomecanica
                        if (item.CumplioLitologia == enmEstadoCumplimiento.Cumplido.GetHashCode() ||
                            item.CumplioMuestra == enmEstadoCumplimiento.Cumplido.GetHashCode() ||
                            item.CumplioEstructura == enmEstadoCumplimiento.Cumplido.GetHashCode() ||
                            item.CumplioGeomecanica == enmEstadoCumplimiento.Cumplido.GetHashCode())
                        {
                            this.txtDistancia.ToolTip = "Cumplió litología, muestra, estructura o geomecánica";
                            this.txtDistancia.Enabled = false;
                        }
                        else
                        {
                            this.txtDistancia.ToolTip = string.Empty;
                            this.txtDistancia.Enabled = true;
                        }

                        //Verifico el estado y deshabilito el guardar
                        if (item.Estado.CompareTo((short)enmEstadoSondaje.Finalizado.GetHashCode()) == 0)
                        {
                            this.ibtnGuardar.Visible = false;
                            this.lblEstado.Text = enmEstadoSondaje.Finalizado.ToString();
                        }
                        else
                        {
                            this.ibtnGuardar.Visible = true;
                            this.lblEstado.Text = enmEstadoSondaje.Iniciado.ToString();
                        }


                    }
                }
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:CargarDatos", ex);
            }
        }

        private void GenerarNombreDDH()
        {
            string nombre = enmClaseSondaje.DDH.ToString() + this.txtNumero.Text + this.txtAnio.Text.Substring(2, 2) + this.hidCategoria.Value;
            this.txtNombreDDH.Text = nombre;
        }

        protected override bool Validar(ref  StringBuilder sb)
        {
            bool retorno = true;
            try
            {
                //Valida si el nombre ingresado ya existe, si solo es Nuevo
                if (this.hidCodigo.Value.CompareTo("0") == 0)
                {
                    using (SESondajeClient proxy = new SESondajeClient("BasicHttpBinding_ISESondaje"))
                    {
                        var lista = proxy.ListarSondajePorNombreDDH(this.txtNombreDDH.Text.Trim());
                        if (lista.ToList().Count > 0)
                        {
                            sb.AppendLine("Sondaje con Nombre DDH: " + this.txtNombreDDH.Text.Trim() + " ya existe, verifique el número");
                            retorno = false;
                        }
                    }
                }

                if (this.hidCategoria.Value.CompareTo("M") == 0)
                {
                    if (this.hidCodigoLabor.Value.ToString().CompareTo("0") == 0)
                    {
                        sb.AppendLine("No ha seleccionado Labor.");
                        retorno = false;
                    }
                }

                //Validando Sección
                int seccion = int.Parse(this.txtSeccion.Text);

                using (SEZonaClient proxy = new SEZonaClient("BasicHttpBinding_ISEZona"))
                {
                    var zona = proxy.ObtenerZona(int.Parse(this.ddlZona.SelectedValue.ToString()));
                    using (SEUnidadMineraClient proxyUM = new SEUnidadMineraClient("BasicHttpBinding_ISEUnidadMinera"))
                    {
                        var unidadMinera = proxyUM.ObtenerUnidadMinera(zona.CodigoUnidad);
                        if (unidadMinera != null)
                        {
                            if (seccion < unidadMinera.RangoInicialSeccion || seccion > unidadMinera.RangoFinalSeccion)
                            {
                                sb.AppendLine("La Sección está fuera de rango, rango permitido es " + unidadMinera.RangoInicialSeccion.ToString() + " al " + unidadMinera.RangoFinalSeccion.ToString());
                                retorno = false;
                            }
                        }
                        else
                        {
                            sb.AppendLine("La Sección requiere definición de unidad minera. Defina los rangos de unidad minera");
                            retorno = false;
                        }
                    }
                }

                //Validando la distancia
                double distancia = double.Parse(this.txtDistancia.Text);
                using (SEMaquinaClient proxy = new SEMaquinaClient("BasicHttpBinding_ISEMaquina"))
                {
                    var maquina = proxy.ObtenerMaquina(int.Parse(this.ddlMaquina.SelectedValue.ToString()));
                    if (maquina != null)
                    {
                        if (distancia > maquina.PerforacionMaxima)
                        {
                            sb.Append("La distancia excede a la perforación máxima de la máquina que es " + maquina.PerforacionMaxima.ToString());
                            retorno = false;
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                retorno = false;
                Logger.Error("Sondaje:Validar", ex);
            }
            return retorno;
        }

        protected void ddlEmpresa_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (SEMaquinaClient proxy = new SEMaquinaClient("BasicHttpBinding_ISEMaquina"))
                {
                    this.Bind(this.ddlMaquina, proxy.ObtenerListItem2(int.Parse(this.ddlEmpresa.SelectedValue), enmDiamantino.EsDiamantino.GetHashCode()).ToList());
                    this.ddlMaquina.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString()));
                }
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:ddlEmpresa_SelectedIndexChanged", ex);
            }
        }

        protected void imgClose_Click(object sender, ImageClickEventArgs e)
        {
            this.mpRegistro.Hide();
        }

        protected void rgLista_ItemCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName.CompareTo("Editar") == 0)
            {
                var item = (GridEditableItem)e.Item;
                int codigoSondaje = int.Parse(item.GetDataKeyValue("CodigoSondaje").ToString());
                //Carga detalle de sondaje
                Habilitar(true);
                this.CargarDatos(codigoSondaje);

                this.ddlCategoria.Enabled = false;
                this.txtNumero.Enabled = false;
                this.txtAnio.Enabled = false;
                this.txtNombreDDH.Enabled = false;

                OcultarMensaje();
                OcultarMensajeValidacion();

                this.mpRegistro.Show();
            }
            if (e.CommandName.CompareTo("Ver") == 0)
            {
                var item = (GridEditableItem)e.Item;
                int codigoSondaje = int.Parse(item.GetDataKeyValue("CodigoSondaje").ToString());
                //Carga detalle de sondaje
                this.CargarDatos(codigoSondaje);

                this.ddlCategoria.Enabled = false;
                this.txtNumero.Enabled = false;
                this.txtAnio.Enabled = false;
                this.txtNombreDDH.Enabled = false;
                Habilitar(false);
                OcultarMensaje();
                OcultarMensajeValidacion();

                this.mpRegistro.Show();
            }

            if (e.CommandName == RadGrid.FilterCommandName)
            {
                Listar();
            }
        }

        protected void rgLista_DeleteCommand(object sender, GridCommandEventArgs e)
        {
            try
            {
                int codigoSondaje = int.Parse(((GridDataItem)e.Item).GetDataKeyValue("CodigoSondaje").ToString());

                using (var proxy = new SESondajeClient("BasicHttpBinding_ISESondaje"))
                {
                    proxy.EliminarSondaje(codigoSondaje);
                }

                MostrarMensaje(MSG_OK_ELIMINAR);
            }
            catch (Exception ex)
            {
                this.MostrarMensaje(MSG_ERROR_ELIMINAR, enmTipoMensajeMostrar.Error);
                Logger.Error("Sondaje:rgLista_DeleteCommand", ex);
            }
            finally
            {
                this.Listar();
            }
        }


        protected void ddlCategoria_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (var proxy = new SECategoriaSondajeClient("BasicHttpBinding_ISECategoriaSondaje"))
                {
                    var categoria = proxy.ObtenerCategoriaSondaje(int.Parse(this.ddlCategoria.SelectedValue.ToString()));
                    if (categoria != null)
                    {
                        this.hidCategoria.Value = categoria.Abreviatura;
                        this.GenerarNombreDDH();
                    }
                }
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:ddlCategoria_SelectedIndexChanged", ex);
            }
        }

        protected void ibtnBuscar_Click(object sender, ImageClickEventArgs e)
        {
            OcultarMensaje();
            this.Listar();
        }

        protected void ibtnExportar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                Listar();
                string alternateText = "ExcelML";
                this.rgLista.ExportSettings.Excel.Format = (GridExcelExportFormat)Enum.Parse(typeof(GridExcelExportFormat), alternateText);
                this.rgLista.ExportSettings.IgnorePaging = true;
                this.rgLista.ExportSettings.ExportOnlyData = true;
                this.rgLista.ExportSettings.OpenInNewWindow = true;
                this.rgLista.MasterTableView.ExportToExcel();
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:ibtnExportar_Click", ex);
            }
        }

        protected void ibtnRegistrar_Click(object sender, ImageClickEventArgs e)
        {
            Limpiar();
            this.ddlCategoria.Enabled = true;
            this.txtNumero.Enabled = true;
            this.txtAnio.Enabled = true;
            this.txtNombreDDH.Enabled = false;
            this.txtDistancia.Enabled = true;
            this.txtDistancia.ToolTip = string.Empty;
            Habilitar(true);
            this.hidCodigo.Value = "0";
            this.mpRegistro.Show();
        }

        protected void ibtnFinalizar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                OcultarMensaje();
                List<int> sondajes = new List<int>();

                foreach (GridDataItem item in this.rgLista.Items)
                {
                    CheckBox chkSel = (CheckBox)item.FindControl("chkSel");
                    if (chkSel != null)
                    {
                        if (chkSel.Checked)
                        {
                            HiddenField hidSel = (HiddenField)item.FindControl("hidSel");
                            HiddenField hidEstado = (HiddenField)item.FindControl("hidEstado");
                            if (hidEstado.Value.CompareTo(enmEstadoSondaje.Iniciado.GetHashCode().ToString()) == 0)
                                sondajes.Add(int.Parse(hidSel.Value));
                        }
                    }
                }

                //Finaliza los sondajes
                if (sondajes.Count > 0)
                {
                    string result = string.Empty;
                    using (var proxy = new SESondajeClient("BasicHttpBinding_ISESondaje"))
                    {
                        //proxy.FinalizarSondajes(sondajes.ToArray());
                        result = proxy.FinalizarSondaje(sondajes.ToArray());
                    }

                    if (result.CompareTo("Finalizado") == 0)
                    {
                        this.MostrarMensaje(result);
                        //Vuelve la listar
                        this.Listar();
                    }
                    else
                    {
                        this.MostrarMensaje(result, enmTipoMensajeMostrar.Error);
                    }
                }
                else
                {
                    this.MostrarMensaje("Para finalizar al menos debe seleccionar un Sondaje.", enmTipoMensajeMostrar.Advertencia);
                }
            }
            catch (Exception ex)
            {

                MostrarMensaje(MSG_ERROR_GENERICO);
                Logger.Error("Sondaje:ibtnFinalizar_Click", ex);
            }
        }

        protected void ibtnGuardar_Click(object sender, ImageClickEventArgs e)
        {
            this.Guardar();
        }

        protected void ibtnCancelar_Click(object sender, ImageClickEventArgs e)
        {
            this.mpRegistro.Hide();
        }

        protected void ibtnLitologia_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string codigoSondaje = string.Empty;
                codigoSondaje = this.ObtenerCodigoSondajeGrid();

                if (codigoSondaje.CompareTo("0") == 0 || codigoSondaje.Length == 0) return;
                Response.Redirect("frmLitologia1.aspx?id=" + codigoSondaje, false);
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:ibtnLitologia_Click", ex);
            }

        }

        private void Habilitar(bool estado = true)
        {
            this.ddlCategoria.Enabled = estado;
            this.txtNumero.Enabled = estado;
            this.txtAnio.Enabled = estado;
            this.ddlZona.Enabled = estado;
            this.ddlResponsable.Enabled = estado;

            this.lblLabor.Enabled = estado;
            this.searchBoxLabor.Enabled = estado;

            //Carga todas las Maquinas
            this.ddlEmpresa.Enabled = estado;
            this.ddlMaquina.Enabled = estado;

            this.txtFechaInicio.Enabled = estado;
            this.txtFechaFinal.Enabled = estado;
            this.txtSeccion.Enabled = estado;
            this.txtDistancia.Enabled = estado;
            this.chkLitologico.Enabled = estado;
            this.chkMuestras.Enabled = estado;
            this.chkGeomecanica.Enabled = estado;
            this.chkEstructuras.Enabled = estado;
            this.txtObservaciones.Enabled = estado;

            this.ibtnConsultar.Visible = estado;

            this.txtDistancia.Enabled = estado;
            this.ibtnGuardar.Visible = estado;
        }

        private string ObtenerCodigoSondajeGrid()
        {
            string retorno = "0";
            try
            {
                string codigoSondaje = string.Empty;
                foreach (GridDataItem item in this.rgLista.Items)
                {
                    CheckBox chkSel = (CheckBox)item.FindControl("chkSel");
                    if (chkSel != null)
                    {
                        if (chkSel.Checked)
                        {
                            HiddenField hidSel = (HiddenField)item.FindControl("hidSel");
                            codigoSondaje = hidSel.Value;
                            break;
                        }
                    }
                }

                if (codigoSondaje.Length == 0)
                    retorno = "0";
                else
                    retorno = codigoSondaje;
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:SeleccionarSondaje", ex);
            }

            if (retorno.CompareTo("0") == 0) MostrarMensaje("No ha seleccionado ningún Sondaje.", enmTipoMensajeMostrar.Advertencia);
            return retorno;
        }

        protected void ibtnMuestras_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string codigoSondaje = string.Empty;
                codigoSondaje = this.ObtenerCodigoSondajeGrid();

                if (codigoSondaje.CompareTo("0") == 0 || codigoSondaje.Length == 0) return;
                Response.Redirect("frmMuestra1.aspx?id=" + codigoSondaje, false);
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:ibtnLitologia_Click", ex);
            }
        }

        protected void searchBoxLabor_Search(object sender, SearchBoxEventArgs e)
        {
            try
            {
                this.hidDato.Value = "0";
                this.hidCodigoLabor.Value = "0";
                this.searchBoxLabor.Text = string.Empty;
                this.lblLabor.Text = string.Empty;
                if (e.Value != null)
                {
                    this.hidDato.Value = e.Value;
                    this.hidCodigoLabor.Value = e.Value;
                    CargarLabor();
                }
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:searchBoxLabor_Search", ex);
            }
        }

        [WebMethod]
        public static List<SearchBoxData> GetResults(SearchBoxContext context)
        {
            List<SearchBoxData> data = null;
            try
            {
                using (SELaborClient proxy = new SELaborClient("BasicHttpBinding_ISELabor"))
                {
                    var lista = proxy.Buscar(context.Text).ToList();
                    data = lista.Select(x => new SearchBoxData { Value = x.CodigoLabor.ToString(), Text = x.NombreLabor }).ToList();
                }


            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:GetResults", ex);
            }
            return data;
        }

        protected void rgLista_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {
            Listar();
        }

        protected void rgLista_SortCommand(object sender, GridSortCommandEventArgs e)
        {
            Listar();
        }

        protected void rgLista_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
        {
            this.Listar();
        }

        protected void rgLista_ItemDataBound(object sender, GridItemEventArgs e)
        {
            try
            {
                if (e.Item.ItemType == GridItemType.Item || e.Item.ItemType == GridItemType.AlternatingItem)
                {
                    GridDataItem item = (GridDataItem)e.Item;
                    HiddenField hidEstado = (HiddenField)item.FindControl("hidEstado");
                    if (hidEstado.Value.CompareTo(enmEstadoSondaje.Finalizado.GetHashCode().ToString()) == 0)
                    {
                        ImageButton btnEliminar = (ImageButton)item["btnEliminar"].Controls[0];
                        btnEliminar.ToolTip = BUTTON_TOOLTIP_DESHABILITADO;
                        btnEliminar.Enabled = false;

                        ImageButton btnEditar = (ImageButton)item["btnEditar"].Controls[0];
                        btnEditar.ToolTip = BUTTON_TOOLTIP_DESHABILITADO;
                        btnEditar.Enabled = false;
                    }
                }
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:rgLista_ItemDataBound", ex);

            }
        }

        protected void ibtnGeomecanica_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string codigoSondaje = string.Empty;
                codigoSondaje = this.ObtenerCodigoSondajeGrid();

                if (codigoSondaje.CompareTo("0") == 0 || codigoSondaje.Length == 0) return;
                Response.Redirect("frmGeoMecanica.aspx?id=" + codigoSondaje, false);
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:ibtnGeomecanica_Click", ex);
            }
        }

        protected void ibtnEstructura_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string codigoSondaje = string.Empty;
                codigoSondaje = this.ObtenerCodigoSondajeGrid();

                if (codigoSondaje.CompareTo("0") == 0 || codigoSondaje.Length == 0) return;
                Response.Redirect("frmEstructura.aspx?id=" + codigoSondaje, false);
            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:ibtnEstructura_Click", ex);
            }
        }

    }
}